# import re
# match, search, findall, finditer, split, sub, subn, compile, matchobject, flags, erro
# 正则表达式的使用
# (?P<分组名>正则)  可以单独从正则匹配的内容中进一步提取内容
# (?P=分组名)  重复前面分组匹配到的内容
# 注意：如果正则中没有分组，那么findall的结果中每一项是一个元组，元组中只有一个元素，这个元素是匹配到的结果
# 如果正则中有分组，那么findall的结果中每一项是一个元组，元组中的元素个数和分组的个数一致，每一个元素是一个分组匹配到的结果
# 注意：如果正则中没有分组，那么finditer的结果中每一项是一个match对象，match对象可以直接点group方法获取匹配到的结果
# 如果正则中有分组，那么finditer的结果中每一项是一个match对象，match对象可以直接点group方法获取匹配到的结果，
# 也可以通过group方法获取指定分组匹配到的结果
# 注意：如果正则中没有分组，那么match对象的group方法默认获取的是整个正则匹配到的结果
# 如果正则中有分组，那么match对象的group方法默认获取的是第一个分组匹配到的结果
# 注意：如果正则中没有分组，那么match对象的group方法可以通过参数指定获取指定分组匹配到的结果
# 如果正则中有分组，那么match对象的group方法可以通过参数指定获取指定分组匹配到的结果
# 注意：如果正则中没有分组，那么match对象的groups方法获取的是一个空元组
# 如果正则中有分组，那么match对象的groups方法获取的是一个元组，元组中的元素个数和分组的个数一致，每一个元素是一个分组匹配到的结果
# 注意：如果正则中没有分组，那么match对象的groupdict方法获取的是一个空字典
# 如果正则中有分组，那么match对象的groupdict方法获取的是一个字典，字典中的键是分组名，值是分组匹配到的结果
# 注意：如果正则中没有分组，那么match对象的start方法获取的是整个正则匹配到的结果的开始下标
# 如果正则中有分组，那么match对象的start方法获取的是第一个分组匹配到的结果的开始下标
# 注意：如果正则中没有分组，那么match对象的end方法获取的是整个正则匹配到的结果的结束下标
# 如果正则中有分组，那么match对象的end方法获取的是第一个分组匹配到的结果的结束下标
# 注意：如果正则中没有分组，那么match对象的span方法获取的是整个正则匹配到的结果的开始下标和结束下标
# 如果正则中有分组，那么match对象的span方法获取的是第一个分组匹配到的结果的开始下标和结束下标
# 注意：如果正则中没有分组，那么match对象的expand方法可以通过参数指定获取指定分组匹配到的结果
# 如果正则中有分组，那么match对象的expand方法可以通过参数指定获取指定分组匹配到的结果
# 注意：如果正则中没有分组，那么match对象的re属性获取的是整个正则表达式
# 如果正则中有分组，那么match对象的re属性获取的是整个正则表达式
